package proyecto;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Date;
import java.util.Iterator;

import jss2.BinaryTreeNode;
import jss2.LinkedBinarySearchTree;
import jss2.MiArbolFacturas;
import jss2.exceptions.ElementNotFoundException;

public class ListaFacturas {
	
	private MiArbolFacturas<Factura> arbolF;
	
	public ListaFacturas(){
		//arbolF = new LinkedBinarySearchTree<Factura>();
	}
	
	public void anadirFactura(Factura pFactura){
		
		if (this.arbolF.isEmpty()){
			this.arbolF.addElement(pFactura);
		}
		else{
		}
		
	}
	
	public void eliminarFactura(Factura pFactura, Date pFechaActual) throws IOException{
		//si no es de hoy la factura q queremos eliminar, actualizaremos el archivo
		if (pFactura != null){
			if (pFactura.comprobarFecha(pFechaActual)){
				this.arbolF.removeElement(pFactura);
			}
			else{
				this.arbolF.removeElement(pFactura);
				Archivo.getArchivo().eliminarFacturaFichero(pFactura.getId());
			}
		}
		else{
			//////
		}
	}
	
	public Factura buscarFacturaId(int pId){
		
		boolean encontrado = false;
		Iterator<Factura> itr = this.arbolF.iteratorPreOrder(); 
		Factura actual = itr.next();

		while ((actual != null) | encontrado){
			if (actual.comprobarId(pId)){
				encontrado = true;
			}
			else{
				actual = itr.next();
			}
		}
		
		if (!encontrado){
			return null;
		}
		else{
			return actual;
		}
	}
	
	public Factura buscarFacturaImporte(Date pFecha, double pImporte) {
			
		boolean encontrado = false;
		Iterator<Factura> itr = this.arbolF.iteratorPreOrder(); 
		Factura actual = itr.next();

		while ((actual != null) | encontrado){
			if (actual.comprobarFecha(pFecha) && actual.comprobarImporte(pImporte)){
				encontrado = true;
			}
			else{
				actual = itr.next();
			}
		}
		
		if (!encontrado){
			return null;
		}
		else{
			return actual;
		}
	}
	
	
	public void exportarFacturas(File pArchivo) throws IOException {
		///exportamos las facturas del dia actual
		try{
		    BufferedWriter bw = new BufferedWriter(new FileWriter(pArchivo));
		   
		    ///Cogemos las facturas
			//ID;IMPORTE;FECHA;PROVEEDOR;TIENDA
			Iterator<Factura> itr = this.arbolF.iteratorPreOrder(); 
			Factura actual = itr.next();
			while (actual != null){
			    bw.write(actual.toString());
				actual = itr.next();
			} 
			bw.close();
		}
		catch (IOException e) {
			e.printStackTrace();
		}
	}

	public void mostrarUnDia(int pDia, int pMes, int pAno){
		
	}
	
	public void mostrarDesdeDia(int pDia, int pMes, int pAno){
		
	}
}
